package porterduff

// BlendType 混合类型
type BlendType uint

// ColorBlend 像素混合接口
type ColorBlend func(Sr, Sg, Sb, Sa, Dr, Dg, Db, Da float64) (Rr, Rg, Rb, Ra float64)

// 混合类型常量
const (
	BlendTypeClear BlendType = iota
	BlendTypeSrc
	BlendTypeDst
	BlendTypeSrcOver
	BlendTypeDstOver
	BlendTypeSrcIn
	BlendTypeDstIn
	BlendTypeSrcOut
	BlendTypeDstOut
	BlendTypeSrcATop
	BlendTypeDstATop
	BlendTypeXor
	BlendTypeMultiply
	BlendTypeScreen
	BlendTypeDarken
	BlendTypeLighten
)

// Blend 绘制
var Blend = map[BlendType]func(Sr, Sg, Sb, Sa, Dr, Dg, Db, Da float64) (Rr, Rg, Rb, Ra float64){
	BlendTypeClear:    Clear,
	BlendTypeSrc:      Src,
	BlendTypeDst:      Dst,
	BlendTypeSrcOver:  SrcOver,
	BlendTypeDstOver:  DstOver,
	BlendTypeSrcIn:    SrcIn,
	BlendTypeDstIn:    DstIn,
	BlendTypeSrcOut:   SrcOut,
	BlendTypeDstOut:   DstOut,
	BlendTypeSrcATop:  SrcATop,
	BlendTypeDstATop:  DstATop,
	BlendTypeXor:      Xor,
	BlendTypeMultiply: Multiply,
	BlendTypeScreen:   Screen,
	BlendTypeDarken:   Darken,
	BlendTypeLighten:  Lighten,
}
